#define _CRT_SECURE_NO_WARNINGS 1

//
//#include<stdio.h>
//
//void reverse(int nums[], int k, int size)
//{
//	if (k >= size)
//	{
//		k %= size;
//	}
//	for (int s = 1; s <= k; s++)
//	{
//		int tmp = nums[size-1];
//		for (int i = size - 1; i > 0; i--)
//		{
//			nums[i] = nums[i - 1];
//			
//		}
//		nums[0] = tmp;
//	}
//}
//
//int main()
//{
//	int nums[] = { 1,2,3,4,5,6,7 };
//	int k = 3;
//	int sz = sizeof(nums) / sizeof(nums[0]);
//	reverse(nums, k, sz);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", nums[i]);
//	}
//	return 0;
//}


//#include<stdio.h>
//
//#include<string.h>
//
//void rotate(int* nums, int sz, int k)
//{
//	int* tmp = (int*)malloc(sizeof(int) * sz);
//	int i = 0;
//	if (k >= sz)
//	{
//		k %= sz;
//	}
//
//	for (i = 0; i < k; i++)
//	{
//		tmp[i] = nums[sz - k + i];
//	}
//	for (i = 0; i < sz-k; i++)
//	{
//		tmp[k+i] = nums[i];
//	}
//	for (i = 0; i < sz; i++)
//	{
//		nums[i] = tmp[i];
//	}
//	free(tmp);
//	tmp = NULL;
//}
//
//
//int main()
//{
//	int nums[] = { 1,2,3,4,5,6,7 };
//	int k = 3;
//	int sz = sizeof(nums) / sizeof(nums[0]);
//    rotate(nums, sz, k);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", nums[i]);
//	}
//	return 0;
//}


#include<stdio.h>

void reverse(int nums[], int right, int left)
{
	while (right < left)
	{
		int tmp = nums[right];
		nums[right] = nums[left];
		nums[left] = tmp;
		right++;
		left--;
	}
}

void rotate(int nums[], int sz, int k)
{
	if (k >= sz)
	{
		k %= sz;
	}

	reverse(nums, 0,sz - k-1);
	reverse(nums, sz - k, sz - 1);
	reverse(nums, 0, sz - 1);
}


int main()
{
	int nums[] = { 1,2,3,4,5,6,7 };
	int k = 3;
	int sz = sizeof(nums) / sizeof(nums[0]);
	rotate(nums, sz, k);
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", nums[i]);
	}
	return 0;
}